home *** CD-ROM | disk | FTP | other *** search
/ QRZ! Ham Radio 9 / QRZ Ham Radio Callsign Database - Volume 9.iso / pc / files / t_docs / rspf2.doc < prev    next >
Text File  |  1996-06-24  |  50KB  |  963 lines

  1.                 Fred Goldstein   k1io
  2.                 goldstein@aim.dec.com
  3.                 Version 2.0  3-june-1988
  4.  
  5.      The Radio Shortest Path First Routing Algorithm (RSPF)
  6.       For DDN Internet Protocol over Amateur Packet Radio 
  7.  
  8.         ** DRAFT ARCHITECTURE -- FOR COMMENT **
  9.  
  10. CONTENTS
  11.  
  12. I.   Introduction
  13. II.  Acquisition of router-router adjacencies
  14. III. Acquisition of end node adjacencies
  15. IV.  Link state propogation
  16. V.   The Shortest Path First Spanning Tree 
  17. Appendix:  Router Parameters
  18.  
  19.  
  20. I.  Introduction
  21.  
  22. Amateur packet radio use of the Internet Protocol does not yet provide 
  23. all of the capabilities of other IP networks.  One particular example
  24. of this is IP packet routing.  Existing versions of the AMPR IP code
  25. make use of a static routing table.  This requires human intervention
  26. every time a new backbone path is added, and adds geographic constraints
  27. to address assignment which do not exist on the ARPA Internet. 
  28.  
  29. The core ARPAnet has implemented automatic routing based upon Dijkstra's
  30. "SPF" (shortest path first) spanning tree algorithm.  A similar
  31. procedure can be applied to AMPRnet (Net 44).  It is called Radio 
  32. Shortest Packet First (RSPF); this document outlines the RSPF protocol.
  33.  
  34. I.1. Elements of RSPF
  35.  
  36. The RSPF protocol is designed for use by network-layer routing nodes (IP 
  37. Gateways) in a packet radio network using the DDN Internet Protocol.  
  38. It is comprised of four major functions:
  39.  
  40.     1) Acquisition of router-router adjacencies
  41.     2) Acquisition of end node adjacencies
  42.     3) Link state propogation
  43.     4) Spanning tree route decision making.
  44.  
  45. Its net result is the automatic maintenance of a least-cost routing 
  46. table for use by IP Routing.  RSPF is optimized for the geographically
  47. heirarchical addressing used in AMPRnet, but does not depend upon it. 
  48.  
  49. I.2. Addressing convention
  50.  
  51. When an RSPF router communicates with an end node, it will typically
  52. deal with a 32 bit IP address.  Routers themselves, however, also
  53. support node group addressing (fewer than 32 bits need match).  This
  54. follows the convention in the KA9Q IP routing program, which permits a
  55. crude form of heirarchical addressing as well as allowing portable
  56. operations to override the defaults.  RSPF looks for the match (node or
  57. node group) with the greatest number of matching bits.  Only if the
  58. number of bits matched is equal, then the lower cost path will be used.
  59. (Thus a match to a full node address will override a "cheaper" path that
  60. matches its "class C net" of 24 bits, which overrides a "class B net",
  61. etc., noting that AMPRnet does not follow strict 8-bit address
  62. classification, and is a single Class A net.) 
  63.  
  64. I.3. Connection-oriented vs. connectionless lower layers
  65.  
  66. IP is a datagram network protocol, and supports both connection-oriented 
  67. and connectionless lower layers.  In a network with a high packet loss 
  68. rate, the local retransmission provided by a connection-oriented 
  69. datalink will substantially improve overall throughput.  However, in a 
  70. high-speed dedicated backbone, particularly one implemented using 
  71. full-duplex radio or wireline links, connectionless may provide better 
  72. overall performance.  The choice of which to use is a local matter; RSPF 
  73. will work with both.  The reliability of the routing information, 
  74. however, may be somewhat greater with connection-oriented datalink 
  75. procedures, since these will give more rapid indication of a physical 
  76. link failure.
  77.  
  78. I.4. Relationship to other protocols
  79.  
  80. The reliability of the network depends upon reasonably reliable
  81. transmission of the routing update; hence, for non-broadcast procedures, 
  82. it is recommended that routers communicate with one another using
  83. connected-mode AX.25, or another reliable data link layer.  (In any case
  84. connected-AX.25 may be more useful than connectionless for backbone 
  85. links due to its local error correction ability.)  
  86.  
  87. All packets specific to RSPF shall be exchanged inside IP packets using
  88. a protocol identifier of <tbd>.  Such IP packets shall be sent with a
  89. time to live (TTL) value of 1.  If broadcast procedures are used,
  90. connectionless AX.25 UI frames shall be sent, with a multicast address
  91. "QSTRTR-0" in the AX.25 address and an IP address of 44.255.255.255. (A
  92. router can also "read the mail" on passing traffic not addressed to it;
  93. such procedures are for further study.) 
  94.  
  95. Note that in this document, "subnetwork" and "data link" are synonymous, 
  96. and refer to the layer over which IP packets are exchanged.
  97.  
  98. II.  Acquisition of router-router adjacencies
  99.  
  100. For RSPF to operate correctly, all routers must remain reasonably
  101. current as to the state of the network at large.  This is handled by
  102. the propogation of "bulletin" messages among routers.  End nodes need
  103. not concern themselves with this; they will normally communicate
  104. through one "designated" router at any given time, for all
  105. (non-adjacent) destinations (not seen by ARP or other lower-layer 
  106. procedures).
  107.  
  108. All information propogated through the bulletin process begins with each 
  109. routers' maintenance of an adjacencies table.  Each router's adjacency
  110. table lists the following information for all other nodes, both routers
  111. and end nodes, from which it directly receives packets over a subnetwork 
  112. (or data link):
  113.  
  114.     Adjacent node IP address (i.e., 44.56.0.44)
  115.     Adjacent node datalink (AX.25) address (i.e., K1IO-0)
  116.     Datalink used (i.e., AX0)
  117.     Datalink cost (i.e., 4)
  118.     Number of packets heard since last RRH update (i.e., 50)
  119.     Packet sequence number in last RRH update (i.e., 12593)
  120.     Time of last RRH update (i.e., 2130).
  121.  
  122.  
  123. II.1.  Router-router hello
  124.  
  125. For the backbone to create its topology automatically, there must be a
  126. way for routers to discover each other with minimal overhead.  For
  127. this purpose, a router-router hello (RRH) message is provided.
  128. Periodically (as an initial suggestion, shortly before beginning to
  129. propogate the periodic links state bulletin to known adjacencies), the
  130. router sends out the RRH message to the layer 2 multicast address and IP
  131. multicast address (i.e., 44.255.255.255) .  RSPF makes no assumption of
  132. reciprocity (that links are bidirectional), so receipt of an RRH packet
  133. provides the receiver with information about a one-way (received) 
  134. adjacency. 
  135.  
  136. II.2.  Connection-oriented procedure
  137.  
  138. If a router uses connection-oriented datalink procedures to its own 
  139. adjacencies (recommended), then when a router receives this RRH 
  140. packet, it checks to see if it already has a link to its origin in its
  141. own links table.  If not, it waits a random period of time (initial 
  142. suggestion:  within the range of 0 -> 10*(link's value of T1, DWAIT or
  143. SLOTTIME - tbd)) and then attempts to establish an AX.25 connection with
  144. the usual SABM; the router responds with the usual UA (link established)
  145. or DM (link rejected). 
  146.  
  147. If a two-way connection has been established, then both routers add the 
  148. link to their adjacency tables.  While the existence of this route is 
  149. set reciprocally, the cost of each side of the route is set separately 
  150. for each side of the connection.  Cost is transmitted in the link state 
  151. packet.  Thus the adjacency between two routers is not actually used 
  152. until the first link state packet exchange has taken place.
  153.  
  154. Loss of an adjacency may be noted by the loss of the AX.25 connection.  
  155. When this occurs, the router removes the router from its adjacency table 
  156. and follows the "bad news" procedures outlined below for link state 
  157. propogation.
  158.  
  159. II.3.  Connectionless procedure
  160.  
  161. If a router uses connectionless datalink procedures to its own 
  162. adjacencies (suitable to low-loss links), then when a router receives an 
  163. RRH packet, it checks to see if this adjacency is already in its 
  164. adjacency table.  If not, then it is added.  
  165.  
  166. Loss of an adjacency may be noted by timeout; if no RRH message is 
  167. received, and no frames have been received from the adjacent router for 
  168. a period of time (initial suggestion:  slightly over twice the maximum 
  169. interval between RRH messages), then the adjacency becomes suspect.
  170. The router should attempt to exchange a packet with the suspect 
  171. adjacency; if unsuccessful, the route is marked lost.  It may also be 
  172. marked lost if other attempts to send data through that router fail.
  173. (Exact procedures for further study.)
  174.  
  175. Table II-1.  Coding of the RRH PDU.
  176.  
  177.                   1           2
  178.  |0              |8              |6              |4              |
  179.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
  180.  | RSPF Version #| Type (RRH)    | Checksum                      |
  181.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
  182.  |         Full IP Address of sending router                     |
  183.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
  184.  |  last packet sent seq. #      |  flags        |
  185.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  186.  |        plaintext                                              |...
  187.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  188.  
  189.  
  190. Parameters--
  191.  
  192.   An RSPF Router-Router Hello packet is sent within IP with a type
  193.   of <tbd>.  Each RRH packet contains the following fields:
  194.  
  195.     RSPF Version Number:  Version number of this protocol (initially 1).
  196.  
  197.     Type:  Value of 3 for RRH.
  198.  
  199.     Checksum:  IP-style checksum
  200.  
  201.     Address:  Full IP address of sending router
  202.  
  203.     Last packet sent sequence number:  An integer (mod 65535) 
  204.     incremented by 1 for every frame sent by the datalink layer.
  205.     This allows receiving entities using connectionless procedures 
  206.     to use the automatic link quality measurement technique 
  207.     described below.
  208.  
  209.     Flags:  The low-order bit is 1 if connectionless datalink is
  210.     preferred; 0 if connection-oriented is preferred.  (Set by
  211.     system management based upon anticipated link quality.)
  212.     Other bits are reserved (sent 0).
  213.  
  214.     Plaintext:  An optional text message (length may be up to maximum
  215.     size remaining in datalink PDU).
  216.  
  217. II.4.  Automatic link quality measurement
  218.  
  219. A connectionless link or subnetwork may have very reliable, or very
  220. sporadic, performance.  Since there is no procedure for ensuring the
  221. reliability of packets sent over a connectionless link, a high rate of 
  222. packet loss may occur without being detected by the routers.  If this 
  223. loss is high enough, another route may become a better choice; a high 
  224. enough packet loss rate may be enough to mark a link as "down".
  225.  
  226. Every router shall maintain a count of packets sent over each link.
  227. Every time an RRH message is sent, it includes the current value of this 
  228. counter (modulo 65535).  Every router also maintains, in its adjacency 
  229. table, a count of packets received from this adjacency since the last 
  230. RRH message and the last received value of that counter.
  231.  
  232. Upon receipt of an RRH message, the recipient router compares the value 
  233. of the received packet counter with the last received value in the 
  234. adjacency table.  The difference (taking into account wrap-around at the 
  235. modulus) is compared with the number of packets received since the last 
  236. RRH message.  (This works even if an RRH message is lost.)  This packet 
  237. loss ratio is then used as a link quality metric.  (Timestamp is used
  238. to compute packet arrival rate.)
  239.  
  240. Connection-oriented data links presumably deliver 100% of attempted 
  241. packets.  A high-quality connectionless link, such as Ethernet/LLC1, will 
  242. come close to this.  However, single-frequency packet radio links are 
  243. prone to packet loss for several reasons, including hidden transmitters, 
  244. lack of collision detection, and rf interference.  The packet loss ratio
  245. is useful in setting link cost, and may also be used to determine
  246. whether a link should use connectionless or connection-oriented 
  247. procedures.
  248.  
  249. If a router reports, in its link update packets, that a given link has a 
  250. cost of _n_, then its adjacencies (and only its adjacencies) may apply 
  251. the packet loss ratio to adjust the cost which they maintain in their 
  252. link state tables.  These adjusted costs, rather than the received 
  253. costs, may then be propogated to other routers.  Specific procedures
  254. and parameters for this are for further study.
  255.  
  256.  
  257. III. Acquisition of end node adjacencies
  258.  
  259. Three possible means of determining adjacencies to end nodes are the use
  260. of connected-mode AX.25 links, the use of ARP, and the use of a 
  261. "wiretap" algorithm (see RFC981).  Unless a connection mode Data Link
  262. layer (with keepalive timers) is used, adjacent nodes may need to send
  263. each other messages at regular intervals to ensure that the link is
  264. still usable.  A procedure is outlined below for routers and end nodes 
  265. to acquire knowledge of each other. 
  266.  
  267. It is assumed that RSPF will not be activated in end nodes; this will
  268. permit simpler versions of the IP software to be used.  A node that has 
  269. RSPF support in its software but operates as an end node can also use 
  270. the router-router connection procedures and simply broadcast its
  271. adjacency to the router in a one-entry bulletin with a horizon of one.
  272. Such a node may also be simultaneously homed on two or more other
  273. routers, unlike true end nodes whose traffic either bypasses RSPF (using 
  274. ARP) or arrives by way of its associated router.
  275.  
  276. If an end node knows the IP address of the router which will connect
  277. it to the network at large, it establishes a connected-mode AX.25 (or
  278. other data link layer) connection to the router; the presence of this
  279. connection indicates that the node is reachable from that router,
  280. which then adds it to its links table and subsequent bulletins.  This
  281. may, of course, require an ARP exchange in order to acquire the AX.25
  282. (data link layer) address.  
  283.  
  284. Alternately, the end node can simply use ARP and use connectionless 
  285. link procedures. In this case the router should assume that the end node
  286. is available until either a rather lengthy timer expires, or the router
  287. is unable to make an ARP contact after the ARP timer expires.  (A loss
  288. of reachability should not be inferred from the ARP timeout.) 
  289.  
  290. Routers should periodically broadcast their availability (suggested 
  291. interval:  every 15 minutes) with an AX.25 UI frame sent to QST-0 (the 
  292. AX.25 broadcast address).  A human-readable "unproto" message may go 
  293. here, allowing individual operators to recognize routers and connect
  294. as appropriate.  (No specific PDU coding is provided, as the end
  295. nodes do not use RSPF.)
  296.  
  297. A router may also choose to use "Promiscuous ARP" to provide service to 
  298. an end node which is attempting to connect with an IP address reachable 
  299. by the router.  In such a case the router should wait an extra interval 
  300. after receiving the ARP request because the desired destination may 
  301. actually be directly reachable; ARP procedures may need to be modified
  302. to provide this. 
  303.  
  304. Another potential approach is for routers to simply listen to AX.25 
  305. traffic on the link and determine who is adjacent to whom.  This is the 
  306. gist of the "wiretap" algorithm in RFC981, which also finds non-adjacent 
  307. nodes by taking advantage of the source routing found in AX.25 frames.
  308. Integration of wiretap into RSPF is for further study.
  309.  
  310.  
  311. IV.  Link state propogation
  312.  
  313. IV.1.  Optional multicast/broadcast
  314.  
  315. Packet radio is inherently a broadcast medium.  Packet radio networks, 
  316. however, may be viewed as a collection of individual links which happen 
  317. to use a broadcast physical medium.  It is also possible to exploit the
  318. broadcast nature of the medium.  RSPF link state propogation procedures
  319. allow but do not require such multicasting.  If the link uses
  320. connectionless procedures for user data packet exchange, then broadcast
  321. procedures should be used for link state packet exchange.  The converse
  322. may not necessarily be true:  The threshhold of loss that militates
  323. against connectionless transmission of user data may be more stringent
  324. than that which call for non-broadcast transmission of link state
  325. packets.  (Details for further study.) 
  326.  
  327. IV.2.  Routing update bulletins
  328.  
  329. Routing updates are passed along from router to router via routing
  330. update bulletins.  Bulletin propogation is designed to guarantee that
  331. every node within a given "horizon" receives every routing update
  332. message sent out by a given node. 
  333.  
  334. Every router originates information about changes in its own adjacencies, 
  335. as well as periodic retransissions of its entire list of adjacencies.  
  336. These messages are then propogated among other routers. The router whose
  337. adjacency information is being broadcast is called the _reporting
  338. router_; this may be some hops away from the routers which forward it to
  339. their own adjacencies.  Each reporting router's adjacency updates
  340. contain a sequence number (and in some cases, a subsequence number). 
  341. These sequence numbers are generated by the reporting router and 
  342. propogated; they are not changed when a bulletin is relayed.  They 
  343. are incrememted by 1 (modulo 65536) every time a new one is generated. 
  344.  
  345. Bulletins may also carry incremental change information to previous 
  346. bulletins.  These carry the same sequence number as the full bulletin to 
  347. which they are reporting incremental changes; each such bulletin has a 
  348. subsequence number.  The subsequence number is zero for a complete 
  349. routing update bulletin.
  350.  
  351. Every bulletin also has a horizon value, set by the reporting router,
  352. associated with each of its constituent links.  (A given reporting
  353. router may have more than one constituent link, if it is a multi-port
  354. router.)  Every time a bulletin is propogated, each horizon value is
  355. decremented by 1.  When it hits zero, the bulletin is not propogated
  356. further.  Note that for horizon purposes, a bulletin's individual
  357. constituent links may have separate horizons; when a link's horizon hits
  358. zero, other links' adjacency information from the same reporting router 
  359. may continue to be propogated. 
  360.  
  361. Every router maintains within memory a routers table containing one
  362. tuple for every other router on the network.  This tuple contains the
  363. following elements:  
  364.  
  365.     IP Address 
  366.     Last received bulletin sequence number 
  367.     Last received bulletin subsequence number 
  368.     Timestamp for when the data was received.  
  369.  
  370. This table is used to coordinate the receipt and transmission of
  371. bulletins, using either broadcast or non-broadcast procedures. 
  372.  
  373. IV.3.  Flooding without congestion collapse
  374.  
  375. A bulletin from reporting router X (stating adjacencies seen by X) is
  376. sent, initially by X, to every adjacent router A, which passes it along
  377. to all of its own adjacencies B.  The routing update bulletin (which is
  378. loosely based on the Internet EGP (Exterior Gateway Protocol)) may
  379. contain one or more routers' adjacency lists, to be forwarded to
  380. adjacent routers.  This "flooding" is controlled such that no reporting
  381. router's adjacency update is sent more than once between the same pair
  382. of routers.  (A bulletin packet may actually concatenate multiple
  383. reporting routers' adjacency information; each is numbered separately,
  384. even if transmitted within the same packet.  This is done to reduce
  385. the overhead of short transmitted packets.)
  386.  
  387. After router A sends its bulletin to B, the recipient router B then 
  388. looks at the sequence number of each reporting router X's adjacency
  389. message and the sequence number of the last received adjacency message
  390. that originated from X.  If the just-received bulletin is newer (higher
  391. number), then it sends a positive acknowledgement to A, and joins in the
  392. flooding to its own adjacencies.  The horizon is, of course, 
  393. decremented.
  394.  
  395. If it has the same number, B checks the horizon left in the received
  396. bulletin against the horizon left when it previously received the bulletin.
  397. In the event that the latest bulletin received had a shorter (lower 
  398. number) horizon left than the earlier one, it simply acknowledges the
  399. (redundant) message.  But if the reporting router X's horizon left is
  400. greater for the new copy of the bulletin, router B propogates it as if
  401. it were a new bulletin. This way, if the bulletin happened to first
  402. arrive via a roundabout path, it won't accidentally fail to reach the
  403. intended end of its range. 
  404.  
  405. If any router B receives from router A a bulletin (from any reporting 
  406. router X) that contains a lower sequence number than one that had 
  407. previously arrived at B, then it can be presumed to be "obsolete" 
  408. information.  B replies by sending a bulletin to A with the latest link
  409. state information for that node X.  As a corrolary, a router may poll 
  410. for information about a given reporting router by sending a routing 
  411. update bulletin for that reporting router with a sequence number that is 
  412. lower than the latest one it actually has received.  Said bulletin may 
  413. contain zero links' information.  (Note that since the sequence 
  414. number is modular, a value of 0 is not correct for this function as 0 
  415. is higher than 65535; the "poll" number should be only slightly lower.)
  416.  
  417. IV.4.  Non-broadcast bulletin propogation
  418.  
  419. A router may acquire routing information from adjacent routers via 
  420. point-to-point procedures which treat every adjacency as a separate 
  421. logical data link.  (Such a procedure also works, of course, over 
  422. point-to-point links such as wirelines.)  This tends to have the highest
  423. reliability, since connection-oriented data link control procedures can
  424. be used to ensure the accuracy and completeness of the data passed over
  425. the link.  It has the disadvantage of requiring separate transmission of
  426. the same data to different adjacent nodes on the same channel. 
  427.  
  428. IV.5.  Broadcast bulletin propogation
  429.  
  430. When a router is adjacent to several other routers via the same 
  431. broadcast (i.e., packet radio) channel, retransmission of routing
  432. bulletins to each adjacency makes additional use of bandwidth, which may
  433. be a scarce resource. A broadcast procedure may be used to pass the
  434. bulletin along that link.  Note that broadcast propogation of bulletins
  435. may be combined with non-broadcast propogation, on a link by link basis.
  436. Although packet radio is a broadcast medium, it is not a perfect one:
  437. The reliability of multicast packets is not as high as for wireline LANs.
  438. This leads to the need for a unique broadcast "flooding" technique.
  439.  
  440. A routing update bulletin is broadcast to the Layer 2 multicast AX.25
  441. address "QSTRTR-0" using the IP multicast address (in AMPRnet,
  442. 44.255.255.255).  Individual recipient routers may or may not receive
  443. the entire bulletin, since there is no acknowledgement possible. 
  444.  
  445. In a non-broadcast message sent via a connection-oriented datalink, the
  446. entire routing update bulletin can be assumed to have been received
  447. intact.  Thus, if a given reporting router has originated a new complete
  448. list of its adjacencies (new sequence number, subsequence number equals
  449. 0), then any adjacency not included is presumed to have ceased to exist.
  450. Such a presumption is not always possible when a bulletin was received
  451. via unacknowledged broadcast, as the message might have been received in
  452. part.  This should not make the partially received bulletin unusable. 
  453.  
  454. A bulletin is transmitted in one or more packets, each of which
  455. constitutes a numbered fragment of the whole bulletin.  Within the
  456. transmitted bulletin, each individual reporting router's node-header
  457. contains the number of links being reported on, and each link-header
  458. contains the number of adjacencies being reported on.  Since each IP
  459. packet that makes up a bulletin contains a fragment number, it is also
  460. possible to determine whether or not a fragment was lost.  
  461.  
  462. In connection-oriented non-broadcast procedures, a routing update 
  463. bulletin (not a partial one with a subsequence number >0) provides a 
  464. complete list of adjacencies known to the sending node, except where the 
  465. horizon is exceeded.  Absence of a previouly-known adjacency then 
  466. implies that the adjacency has been lost.  However, that assumption does 
  467. not apply to fragmented bulletins received in part, which can occur with 
  468. broadcast procedures: If a fragment was lost before reaching the end of
  469. a given reporting router's portion of the bulletin, then the absence of
  470. a previously-known adjacency in the received bulletin does not mean that
  471. the adjacency was lost. 
  472.  
  473. RSPF procedures dictate that routing update bulletins with a subsequence 
  474. number of zero are presumed to be complete lists of adjacencies from 
  475. their originators; higher subsequence numbers represent incremental
  476. changes only.  In the broadcast procedures, a routing update bulletin 
  477. with a subsequence number of zero, if received only in part, is
  478. treated as an incremental change bulletin.  
  479.  
  480. Thus, the recipient compares the sequence number with the previously
  481. received sequence number from that reporting router.  If it is higher
  482. than the previously received one, then its adjacencies are used.  If
  483. it was received in full, and had a subsequence number of 0, then its 
  484. previous adjacencies are replaced.  If it was not received in full, or 
  485. if its subsequence number was not zero, then its previous adjacencies 
  486. are left intact unless explicitly changed by the received bulletin.
  487.  
  488. If a bulletin is received in full, then the routers table is updated 
  489. with the latest sequence and/or subsequence number and timestamp.
  490. If it is received in part, then these entries are not updated.  After 
  491. the bulletin has been completely transmitted, a recipient node which has 
  492. received a partial update from a reporting node may poll for that node's 
  493. latest information, by using the (now known to be obsolete) sequence
  494. number for that router in its router table in a bulletin, with zero links
  495. for that reporting router.  (This is the same polling procedure used for 
  496. non-broadcast links.)
  497.  
  498. Note that if a fragment is lost, a reporting router whose node-header is 
  499. in the lost fragment will of course remain unchanged in the recipient's 
  500. data base.  Furthermore, any data received in subsequent fragments, 
  501. prior to a node-header, will also be meaningless.  The last adjacency 
  502. of the last link in a reporting router's bulletin will have the Last 
  503. flag set to 1, signaling that following the address, a node header 
  504. follows.
  505.  
  506. IV.6.  Routing update bulletin packets 
  507.  
  508. A routing update bulletin packet (Table IV.1) may contain several
  509. different reporting routers' updated link state information,
  510. concatenated into one message, with a different sequence number for each
  511. source (reporting router).  One of the sources, of course, may be the
  512. local router.  Each router's link state information is further broken
  513. down by link, which allows its backbone routing information to be
  514. propogated separately from its local end node adjacency information. 
  515.  
  516. Incremental changes (good news and bad news)
  517.  
  518. Bulletins that only report changes in state come in two flavors.  Good
  519. News bulletins inform other routers that an adjacency has been noted.
  520. Bad News bulletins inform them that an adjacency has been lost.  If an
  521. end node establishes a connection with a router whose node group default
  522. addresses (based on the significant bit count) already include that end
  523. station, however, no bulletin need be sent out, as packets to that end 
  524. station will already be routed correctly.  Theoretically, a router could
  525. send out a new full routing update bulletin every time it gained or lost
  526. an adjacency. However, the use of shorter Good News and Bad News
  527. packets, which do not contain a full routing update, allow the network
  528. to remain relatively current with less transmitted traffic. 
  529.  
  530. Good news and bad news packets are propogated like other packets,
  531. but are not originated by the same rules.  While full routing bulletins
  532. are originated based upon a timer, good news packets are transmitted
  533. immediately.  This enables new links to be useful quickly.  Bad news,
  534. however, should not travel as fast:  A node should cache any bad
  535. news message for a time (initial recommendation for this timer: 60 
  536. seconds) while waiting for the link to come back up.  This helps keep
  537. the network stable; if the node receives a packet destined for the 
  538. lost destination, it may send an ICMP "host unreachable" message
  539. to the originator of the packet, unless it can reroute the packet
  540. itself (as may happen with the loss of a backbone link where others
  541. exist).
  542.  
  543. Because good news and bad news messages represent changes to the last
  544. full link state bulletin propogated, but do not purport to completely
  545. represent a node's link states, they carry bulletin subsequence
  546. numbers.  These use the last bulletin sequence number originated by the
  547. reporting router, but the sub-sequence value increments from 1. (A full 
  548. link state packet has a sub-sequence value of 0, and resets the 
  549. subsequence counter.) 
  550.  
  551. Routes to nearby destinations
  552.  
  553. Sometimes more than one router will serve the same area (determined by 
  554. the significant bits' matching), and they will need to know which one has 
  555. the better path to a given station.  These adjacency messages may only 
  556. require a short horizon, as will Good News and Bad News packets which 
  557. refer to end nodes going on and off the air.   Higher horizons are 
  558. needed for backbone routers.
  559.  
  560. Table IV.1.  Full routing update (link state packet) bulletin:
  561.  
  562.                   1           2
  563.  |0              |8              |6              |4              |
  564.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ----
  565.  | RSPF Version #| Type          | fragment #    | fragment total| packet
  566.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -hdr
  567.  |       Checksum                | sync octet    | # nodes below |
  568.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ----
  569.  |         Reporting node #1 full IP Address                     | node
  570.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -hdr
  571.  |  Node 1 bulletin  sequence #  | sub-sequence #| # links       |
  572.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ----
  573.  | horizon left   |  ERP factor  |  link cost    |  #adjacencies | link
  574.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ _-hdr_
  575.  |significant bits|
  576.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  577.  |              Adjacent node(s) 1,1,1 IP address                | adj.
  578.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  579.  |significant bits|
  580.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  581.  |             Adjacent node(s) 1,1,2 IP address                 | adj.
  582.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  583.                        ...
  584.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  585.  |significant bits|
  586.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  587.  |             Adjacent node(s) 1,1,n IP address                 |
  588.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  589.  | horizon left   |  ERP factor  |  link cost    |  #adjacencies | link
  590.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  591.  |significant bits|
  592.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  593.  |             Adjacent node(s) 1,2,1 IP address                 | adj.
  594.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  595.                         ...
  596.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  597.  |significant bits|
  598.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  599.  |             Adjacent node(s) 1,2,n IP address                 |
  600.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  601.  |         Reporting node #2 full IP Address                     | node
  602.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  603.  |  Node 2 bulletin sequence #   | sub-sequence #|  # links      |
  604.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  605.  | horizon left   |  ERP factor  |  link cost    |  #adjacencies | 
  606.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  607.  |significant bits|
  608.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  609.  |             Adjacent node(s) 2,1,1 IP address                 |
  610.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  611.  |significant bits|
  612.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  613.  |             Adjacent node(s) 2,1,2 IP address                 |
  614.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  615.                        ...
  616.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  617.  | horizon left    |  ERP factor |  link cost    |  #adjacencies | 
  618.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  619.  |significant bits|
  620.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  621.  |             Adjacent node(s) 2,2,1 IP address                 |
  622.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  623.                         ...
  624.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  625.  |significant bits|
  626.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  627.  |             Adjacent node(s) 2,2,n IP address                 |
  628.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  629.                         ...
  630.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  631.  |         Reporting node #n full IP address                     |
  632.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  633.  |  Node n bulletin sequence #   | sub-sequence #|   # links     |
  634.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  635.     etc.
  636.  
  637. Parameters--
  638.  
  639.   An RSPF bulletin packet is sent within IP with a type of <tbd>.
  640.   Each routing update packet contains a packet header that contains:
  641.  
  642.     RSPF Version Number:  Version number of the protocol (initially 1).
  643.  
  644.     Type:  (Value 1 for Full Routing Update, 2 for Partial Routing 
  645.     Update.)
  646.  
  647.     Fragment Number:  States which fragment, in a segmented message,
  648.     this is, beginning at 1.  Non-fragmented messages use 1.
  649.     
  650.     Fragment total:  Total number of fragments in message; 1 if not 
  651.     fragmented.
  652.  
  653.     Checksum:  IP-style checksum.
  654.  
  655.     Sync octet:  Which octet in this packet (counting from this 
  656.     byte as byte 0) is the beginning of a node-header.  If 0,
  657.     this fragment has no node-header.  Non-fragmented messages
  658.     use a value of 2 (because one byte follows in packet header).
  659.  
  660.     Number of nodes reporting:  The number of reporting routers in the 
  661.     messages that follows (this packet or a sequence of packets).
  662.  
  663.  
  664.   The node-header (for each reporting router) contains 8 octets:
  665.  
  666.     Reporting router #n full IP address:  The IP address of the router
  667.     whose adjacencies are being reported below.
  668.  
  669.     Bulletin sequence number:  When a bulletin is passed along, this 
  670.     number is NOT changed; every new bulletin from a given Reporting 
  671.     router has a value 1 higher than the previous bulletin from that
  672.     reporting router.  (Note:  This is modulo 65536, so implementations
  673.     must cope with the "wrap around" and consider values below, say,
  674.     100, to be "higher" than values above, say, 65400.  Between 100
  675.     and 65400, modular arithmetic is NOT used.)
  676.  
  677.     Sub-sequence number:  Good news and bad news packets representing
  678.     incremental changes from the last full report increment this value
  679.     by 1; it is 0 for full bulletins.
  680.  
  681.     # links:  The number of different cost-horizon values (typically, 
  682.     but not necessarily, representing different types of link in a 
  683.     mulitiport gateway) being reported below; the following four octets 
  684.     are the header for each link.
  685.  
  686.  [For each reporting router, adjacencies are reported separately by
  687.   link cost.  This is the received cost value for that data link, after
  688.   any adjustment that may be based upon packet loss ratio.  Adjacencies
  689.   are also reported separately by horizon, even if the cost is the same. 
  690.   It does not matter at this point if there are multiple RF or other 
  691.   links if their cost and horizon are the same.  Likewise, separate
  692.   received costs or horizons on one link will be treated separately
  693.   and such adjacencies will be grouped under separate link headers:]
  694.  
  695.     Horizon left:  This number is decremented every time a routing update 
  696.     bulletin is passed along; when it reaches 0, it is not passed further.
  697.  
  698.     Link cost:  A "figure of merit" for each link, rising with slower/poorer 
  699.     links.  This is the number whose total is minimized by SPF.  The range 
  700.     is 1-127.  As a starting point, a 56000 bps fdx backbone link might have 
  701.     a value of 1, a 4800bps hdx link a value of 4, a 1200bps hdx link a 
  702.     value of 8 and a 300 bps hf "wormhole" a value of 16.  A value of 255 
  703.     denotes the loss of a link; this is found in Bad News packets.  These 
  704.     values should be coordinated network-wide; adjusting them will change 
  705.     the way packets are routed by RSPF.
  706.  
  707.     Number of adjacencies:  The number of adjacencies to be listed for that 
  708.     reporting node.
  709.  
  710.     ERP Factor:  Used for "approximating" a route; contains the number of 
  711.     significant bits for which a given node can be presumed to be a valid 
  712.     router, even if it doesn't report in detail.  A low factor = wider 
  713.     coverage area; thus ERP of 16 means that if NO other match is found for 
  714.     a given address, this router will try to handle it if it matches 16 
  715.     bits.  Basically a handle for future enhancements; its use will not
  716.     be required in the initial release of RSPF.
  717.  
  718.   For each adjacency of the given link cost, the following is provided:
  719.  
  720.     Significant bits: The number of bits used for node group routing 
  721.     purposes.  Usually 32 but may be lower if a given link purports to 
  722.     serve all end nodes in an area defined using the most-matched-bits 
  723.     node group convention.  Higher numbers of bits matched take a higher 
  724.     priority than least cost. This uses the low-order 5 bits of the octet.
  725.  
  726.     Last-flag:  If this is the last adjacency in the list for this 
  727.     reporting router, this value is 1; otherwise it is 0.  (This 
  728.     occupies the high-order bit of the significant bits octet.)
  729.  
  730.     Full IP address: The full IP address for this node.  
  731.  
  732. Note that the n,n,n vector within the bulletin has three fields in the
  733. above representation: Reporting router within bulletin packet, link 
  734. cost/horizon within reporting router, and reporting adjacency with that
  735. link cost/horizon.
  736.  
  737.  
  738. IV.7.  Fragmentation
  739.  
  740. In a moderate to large network, a full routing update can easily exceed 
  741. the maximum size of an AX.25 frame or IP packet.  The RSPF Routing
  742. Update message, however, may be sent in fragments.  No specific protocol
  743. is required for this; bulletins are not assumed to be terminated by a
  744. packet boundary. Each fragment is, however, numbered in the packet
  745. header, along with an indication of the number of fragments to be
  746. sent.  
  747.  
  748. In order to permit parsing of the incoming fragments by routers who
  749. are using unacknowledged broadcast information (with the high 
  750. likelihood of lost fragments), every bulletin's packet header contains a 
  751. sync octet indicator.  This indicates which byte, where the next byte in 
  752. the header is byte 1, is the beginning of a node header.  If a previous 
  753. fragment was lost, the receiver should ignore the number of bytes 
  754. indicated in the sync octet before resuming parsing of the packet.  (If 
  755. the fragment does not exceed 255 bytes, this will always be sufficient.  
  756. It is recognized that long packets may not be able to use this mechanism 
  757. reliably, and a value of "0" should be used to indicate that no sync is 
  758. possible within this fragment.)
  759.  
  760. Each routing update bulletin takes the form of a three- dimensional
  761. list, with the dimensions being reporting router, link and adjacency. A
  762. given bulletin may report on link state from one or more remote nodes,
  763. as well as the sending node.  Each node may have one or more links; each
  764. link may have one or more adjacencies. 
  765.  
  766. Packets may not be fragmented within adjacencies, but may be
  767. fragmented after an adjacency's address and before the next adjacency's
  768. significant bits field.  The next fragment, in a new packet, simply 
  769. begins where the last one left off; the receiver knows how many more to
  770. expect based upon the node and link count in the respective node-header
  771. and link-header. 
  772.  
  773. A router may not start sending a new Routing Update message of any kind 
  774. to any given IP address until all fragments of a previous message have 
  775. been transmitted.
  776.  
  777.  
  778. IV.8.  Bulletin Timers
  779.  
  780. The timers used for bulletin updates must be a compromise between
  781. maintaing the network's current state and the traffic required to do
  782. so.  An initial suggestion:  Good news messages should be initiated
  783. within a few seconds and bad news messages should be initiated within
  784. one minute, with relatively short horizons on the bulletins (i.e., the
  785. routers within the region).  Full routing updates with normal horizons
  786. should be sent out every 30 minutes.  If the network is small, more
  787. frequent updates may be possible; too frequent updates risk choking
  788. the network with update traffic.
  789.  
  790.  
  791. V.  The Shortest Path First spanning tree algorithm
  792.  
  793. As a routing node comes onto the network, it acquires over time a 
  794. complete list of adjacencies between other nodes on the network except 
  795. as limited by the "horizon".  Each adjacency (point to point link) has a 
  796. "cost" associated with it.  It should be noted that adjacencies, for the 
  797. purposes of this algorithm, are "logical" and not necessarily physical; 
  798. if it occurs below IP (as in AX.25 digipieating or NET/ROM), the two 
  799. ends of the link are still adjacent.  (Adjacency at the IP internet 
  800. layer is based upon subnetworks, which may contain their own links.) 
  801. Cost is set for the transmit side of each link; if the receiver and
  802. transmitter do not agree on cost, the network may apply different routes
  803. for packets going in opposite directions between the same two end nodes.
  804. (This is not a problem. In a radio environment, one should NOT assume
  805. reciprocity across a link.) 
  806.  
  807. Each router builds a _link state table_ that lists, for every known
  808. link (from every reporting router), the two ends and the cost of that
  809. end of the link.  The ends are listed by an IP address and, for the 
  810. destination IP address, a number of significant bits.  This is what's
  811. updated by the bulletins and by good news/bad news messages. 
  812.  
  813.     Source IP address    Dest. IP addr/bits    Cost
  814.  
  815.     44.56.0.44        44.56.0.128/32        5
  816.     44.56.0.44        44.56.0.12/25        10
  817.  
  818. The goal of the algorithm is to build a _paths table_ which lists, for
  819. every reachable node (or node group approximation of fewer than 32
  820. bits) on the network, that node address (or node group address and 
  821. number of significant bits), the adjacent node used to get there (i.e.,
  822. where you blast the packets next), and the total cost of the path.  
  823. (This feeds the Route table in the IP Route module in NET.) 
  824.  
  825. Every router contains, for the purposes of building the tree, a 
  826. _trial table_ that has three entries:  Destination address/bits,
  827. adjacent node, and cost of this path.  The paths table additionally 
  828. has one more entry, the _parent_ node, which is the last hop
  829. before the destination.  Thus in a path A -> B -> C -> D -> E, home 
  830. router A views E as the destination, D as the parent, and B as the
  831. adjacency.  Note that in the path from A to B, A is the parent node. 
  832.  
  833. Begin building the paths table by using the home router as the first 
  834. node on the paths table.  The cost to reach yourself is always 0, so 
  835. make the first entry on the paths table as follows:  Source=self,
  836. destination=self, parent=self, and cost=0.  From here on in, parent 
  837. is always (by definition of the SPF spanning tree) the node most 
  838. recently added to the paths table.
  839.  
  840.     Destination    Adjacent     Parent        Cost
  841.  
  842.     44.56.0.128    44.56.0.128    44.56.0.44    5
  843.     44.56.0.131    44.56.0.128    44.56.0.128    10
  844.     44.56.0.200    44.56.0.128    44.56.0.131    15
  845.  
  846.         Paths Table showing relationship between 
  847.     destination, parent and adjacent nodes, where the home
  848.     node is 44.56.0.44 and 44.56.0.200 is three hops away;
  849.     all hops here have a cost of 5.
  850.  
  851. SCAN_THE_LINKS:
  852. The home router now scans its links table looking for all nodes (routers 
  853. and end nodes) that are adjacent to the parent node, except for links to
  854. nodes which are already on the paths table.  (It is generally fastest to
  855. build the paths table by scanning the links table in order of increasing
  856. link cost.)  Each of these new nodes is added to the trial table, except 
  857. for the parent node (which is already on the paths table, so it can't 
  858. possibly have a shorter path).  The value of cost used on the trial table 
  859. is the cost of the link from the parent to the destination plus the cost 
  860. to the parent node (taken from the paths table).  
  861.  
  862. A node may only appear once in the trial table at any given time.  If
  863. an adjacency is found to a node that is already on the trial table, a
  864. new entry replaces the existing entry if and only if the new total
  865. cost is lower.  If the cost is higher, it is ignored.  (If the costs
  866. are equal, then a "tiebreaker" is determined by treating the
  867. lower-numbered IP address as the lower cost.  This will simply make
  868. the spanning tree more deterministic in case of tie.)  Thus the trial
  869. table always contains the lowest cost path to each destination found so
  870. far.
  871.  
  872. Once all of the links from the parent node have had their chance to go 
  873. onto the trial table, scan trial table for the _one_ entry with the 
  874. lowest total cost.  In case of tie, pick the lower IP address (again 
  875. just to be deterministic).  Move this node to the paths table;
  876. guaranteed, there'll be no cheaper path to that node!  The adjacency
  877. used for that node in the paths table is the adjacency to its parent
  878. node.  Note that the parent _must_ already be on the paths table since
  879. that's the source of the parent; you're working your way outward. 
  880.  
  881. This new addition to the paths table becomes the new parent node.  
  882. Repeast the procedure from SCAN_THE_LINKS above until there are no nodes 
  883. left on the trial table.  This means you've completed the spanning tree 
  884. and have a least-cost path to every other node.
  885.  
  886. One of the router parameters is maximum_cost.  If the cost to a given 
  887. parent node exceeds this value, the procedure stops, since all 
  888. subsequent entries in the route table will have a higher cost.  This 
  889. value relates to the time-to-live parameter of the IP packet:  It makes 
  890. little sense to compute a routing table to nodes that cannot be reached 
  891. within time-to-live.  (Ideally, ttl will be implemented using a timer
  892. rather than a node counter, but this is difficult to do with some of the 
  893. packet radio data link controller implementations; vis., TNCs.)
  894.  
  895. A router should recalculate its routes periodically based upon the 
  896. current links table.  How frequently depends upon the CPU load involved.
  897. Initial estimates are that it should be recalculated after receipt of
  898. every routing update bulletin:  Partial calculations do not save
  899. enough CPU time to make them worthwhile.
  900.  
  901. V.2.  Filling in the NET routing table
  902.  
  903. The route table in NET (the KA9Q et al implementation of IP) contains, 
  904. for each entry, the destination address, number of bits, interface, 
  905. gateway and metric.  This is essentially left intact, except that metric 
  906. is filled in by cost and the routing decision looks for the least cost 
  907. of all matches.  The route table is filled in from the paths table.
  908.  
  909. Since the routing table will be periodically recalculated from
  910. scratch, implementation may require two route tables, one "in
  911. progress" and one "in service".  When the route calculation is
  912. complete, the "in progress" table becomes "in service" and the old one
  913. is cleared for reuse.  This allows packet forwarding to continue while
  914. the completed paths table is being converted into the route table.
  915.  
  916.  
  917. Appendix I.  Router parameters
  918.  
  919. Every router must set a number of parameters in order to properly
  920. operate.  While RSPF builds its routing matrix automatically, overall
  921. network efficiency and stability may require some fine-tuning based
  922. upon experience.  These include parameters set for each data link
  923. layer entity (i.e., each radio channel) and for the router in general.
  924.  
  925. Link settings:
  926.  
  927.    Set Link cost:  This is the cost parameter based upon the link speed
  928.     and type.  Since the overall cost of the end-to-end path is
  929.     minimized by the RSPF spanning tree, link cost should be set to
  930.     arrive at the best overall network performance.  The legal range
  931.     is 1-127.  This is sent in routing update bulletins.
  932.  
  933. Node settings: 
  934.  
  935.   Add/Delete Node group: [IPaddr]/bits {cost}.  This allows a node to 
  936.    announce its ability to serve a group of nodes, identified using 
  937.    the standard NET convention of address/significant bits.  Thus a 
  938.    node group setting of [44.56.0.1]/25 will match all nodes from
  939.    [44.56.0.1] to [44.56.0.127].  Cost is optional; if set, this
  940.    cost to will be propogated to reach such nodes; otherwise, the 
  941.    link's default is used. 
  942.  
  943.   Set horizon link:   This sets the horizon value for the node's
  944.    routing bulletins apropos 32-bit addresses of other connected 
  945.    routers.  This should be high enough to propogate across the 
  946.    backbone.
  947.  
  948.   Set horizon group:  This sets the horizon value for the node's
  949.    routing bulletins apropos node group addresses (fewer than 32
  950.    bits matched).  Usually matches the horizon link value.
  951.  
  952.   Set horizon local:  This sets the horizon vaue for the node's
  953.    routing bulletins apropos full link addresses (32 bits) within
  954.    the node group area.  This is set to a low value so that only
  955.    other routers serving the same or overlapping node group(s)
  956.    will receive these messages.
  957.  
  958.   Set horizon portable:  This sets the horizon value for the 
  959.    node's routing bulletins apropos full link addresses (32 bits)
  960.    not within a node group.  This allows portable end nodes to 
  961.    have their location in the network propogated farther than
  962.    the local horizon; this is usually set the same as horizon group.
  963.